package com.awakening.sorting.basic;

import com.awakening.sorting.util.JavaLikeSwap;
import com.awakening.sorting.util.SortTestHelper;

/**
 * 选择排序测试
 * @Author:AwakeningCode
 * @Date: Created in 9:30 2018\1\17 0017
 */
public class SelectionSortTest {

    //SelectionSortTest算法类不产生任何实例
    private SelectionSortTest(){}

    public static <T extends Comparable<T>> void sort(T[] arr){
        int n = arr.length;
        for (int i = 0 ; i < n ; i ++){
            //寻找p[i,n)区间的最小值的索引
            int minIndex = i;
            for (int j = i + 1;j < n ;j ++){
                //使用comparaTo方法比较两个Comparable对象的大小
                if (arr[j].compareTo(arr[minIndex]) < 0){
                    minIndex = j;
                }
            }
            JavaLikeSwap.swapComparable(arr,i,minIndex);
        }
    }

    public static void main(String[] args) {
        //测试算法辅助函数
        int N = 2000;
        Integer arr[] = SortTestHelper.generateRandomArray(N,0,10000);
//        SelectionSortTest.sort(arr);
//        SortTestHelper.printArray(arr);
        SortTestHelper.testSort("com.awakening.sorting.basic.SelectionSortTest",arr);
        return;
    }

}
